CloudWatch の 36 個あるアクションのうち CloudTrail で記録されるのは 15 個だけだと知った
コンバンハ、千葉(幸)です。
この API を実行したの誰だ?と思ったらひとまず CloudTrail を確認しますよね。あるいは「このユーザーが過去に実行した API を知りたい」という切り口で確認することもあるでしょう。
ここで、CloudTrail はすべての AWS サービスのイベント記録をサポートしているわけではありません。そしてややこしいことに、サポートされているサービスであってもすべてのアクションが記録されるわけではありません。
CloudWatch のいくつかのアクションを挙げてみました。これらのうち、CloudTrail イベントの記録対象になるものが何個あるか分かるでしょうか。
- GetInsightRuleReport
- GetMetricData
- GetMetricStatistics
- GetMetricStream
- GetMetricWidgetImage
すぐ正解を言ってしまうと答えは 0 です。上記のアクションはすべて CloudTrail イベントに記録されません。そんな仕様どこに書いてあるの〜?と思った方に向けて調べ方を書いておきます。
まとめ
- CloudTrail によるイベント記録がサポートされている AWS サービスであっても、記録対象のアクションが限定されている場合がある
- 以下のドキュメントから各 AWS サービスのドキュメントに遷移してアクションの記録有無を確認できる
CloudWatch のアクション一覧
CloudWatch で定義されているアクション一覧は以下から確認できます。2021年12月現在では 36 個のアクションがありますが、すぐ増える気がするので細かい数字にはあまり意味はありません。
アクションだけでなくリソースタイプや条件キーも確認できるため、IAM ポリシーと仲良くなるためには必読のリファレンスです。
一階層上の、各種 AWS サービスのリファレンスへのリンクが記載されているのは以下ページです。もちろん皆さんのブックマークに入っているかと思います。
CloudTrail による記録対象の CloudWatch アクション
CloudWatch のアクション全てが CloudTrail の記録対象になるわけではありません。記録対象となっているアクション一覧は以下から確認できます。
上記のページは、CloudWatch の AWS ドキュメントの「セキュリティ」の章に位置します。
他の AWS サービスにおいても概ね同様の構成ですが、「モニタリング」など他の章に位置する場合もあります。
各 AWS サービスのドキュメントにおける CloudTrail との連携が記載されているページには、以下から遷移できます。
このページに限らず、最新の情報を確認したい場合は英語版に切り替えてから参照してください。
CloudWatch のアクション一覧と記録対象有無の紐付け
ここまで見た CloudWatch アクションの一覧、CloudTrail 記録対象有無の情報を統合した表が以下です。
アクション | Trail 記録対象 |
---|---|
DeleteAlarms | ● |
DeleteAnomalyDetector | ● |
DeleteDashboards | ● |
DeleteInsightRules | |
DeleteMetricStream | |
DescribeAlarmHistory | ● |
DescribeAlarms | ● |
DescribeAlarmsForMetric | ● |
DescribeAnomalyDetectors | ● |
DescribeInsightRules | |
DisableAlarmActions | ● |
DisableInsightRules | |
EnableAlarmActions | ● |
EnableInsightRules | |
GetDashboard | ● |
GetInsightRuleReport | |
GetMetricData | |
GetMetricStatistics | |
GetMetricStream | |
GetMetricWidgetImage | |
ListDashboards | ● |
ListMetricStreams | |
ListMetrics | |
ListTagsForResource | |
PutAnomalyDetector | ● |
PutCompositeAlarm | |
PutDashboard | ● |
PutInsightRule | |
PutMetricAlarm | ● |
PutMetricData | |
PutMetricStream | |
SetAlarmState | ● |
StartMetricStreams | |
StopMetricStreams | |
TagResource | |
UntagResource |
2021年12月時点で、CloudWatch の 36 個のアクションのうち CloudTrail の記録対象となっているのは 15 個のみでした。Metric Streams や Insights Rules、Metric Data あたりは軒並み記録対象外になっていますね。
CloudTrail に記録されない?本当に〜?
AWS ドキュメントに書いてあるのでわざわざ疑うまでもないのですが、実際に API コールを実行し、記録されないことを確認してみます。今回はGetMetricData
で試してみます。
AWS CLI のaws cloudwatch get-metric-data
を実行します。
# クエリする内容を環境変数に格納 % QUERY=$(cat <<EOM [ { "Id": "m1", "MetricStat": { "Metric": { "Namespace": "AWS/EC2", "MetricName": "StatusCheckFailed", "Dimensions": [ { "Name": "InstanceId", "Value": "i-0986014d98308ac67" } ] }, "Period": 3600, "Stat": "Sum", "Unit": "Count" }, "ReturnData": true } ] EOM ) # オプションの引数に環境変数を指定してコマンド実行 % aws cloudwatch get-metric-data\ --metric-data-queries "$QUERY"\ --start-time 2021-12-14\ --end-time 2021-12-15 { "MetricDataResults": [ { "Id": "m1", "Label": "StatusCheckFailed", "Timestamps": [ "2021-12-14T10:00:00+00:00", "2021-12-14T09:00:00+00:00" ], "Values": [ 0.0, 0.0 ], "StatusCode": "Complete" } ], "Messages": [] }
20 分程度の十分な時間を置いてから CloudTrail を確認しましたが、上記のコマンド実行に該当するイベントは確認できませんでした。
イベント名でGetMetricData
を指定したフィルタリングはできるのに記録には対応していない、というのが落とし穴ポイントだなと感じます。(将来的に記録に対応するのでしょうか。)
すべてのアクションが CloudTrail に記録されるわけではない
CloudTrail にすべてのアクションが記録されるわけではない、ということを確認しました。
今回気づいたきっかけは CloudWatch のアクションでしたが、他の AWS サービスでも同様のものがあります。
「よくある質問」の一部を切り取って読むと「サポートされているサービスのアクションであればすべて記録されるのでは」と捉えたくなる節がありますが、そんなことはないので注意しましょう。
Q: CloudTrail ではどのようなサービスがサポートされていますか?
AWS CloudTrail では、ほとんどの AWS のサービスにおけるアカウントアクティビティイベントとサービスイベントが記録されます。サポートされているサービスのリストについては、CloudTrail ユーザーガイドの CloudTrail Supported Services を参照してください。
Q: AWS マネジメントコンソールから行われた API コールは記録されますか?
はい。CloudTrail はあらゆるクライアントからのAPI コールを記録します。 AWS マネジメントコンソール、AWS ソフトウェア開発キット (SDK)、コマンドラインツール、および高レベルの AWS のサービスから AWS API が呼び出されるので、これらの呼び出しは記録されます。
そして、そもそもサービス単位で記録がサポートされていないサービスは以下から確認できます。
API が呼び出されているはずなのに CloudTrail に記録されていないな……?という時には、そのアクションが記録対象かどうかを調べてみてください。
以上、 チバユキ (@batchicchi) がお送りしました。